import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
import { BrowserModule } from '@angular/platform-browser';
import { LocationStrategy, HashLocationStrategy } from '@angular/common';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { AppRoutingModule } from './app-routing.module';
import { StyleClassModule } from 'primeng/styleclass';
import { AccordionModule } from 'primeng/accordion';
import { AutoCompleteModule } from 'primeng/autocomplete';
import { AvatarModule } from 'primeng/avatar';
import { AvatarGroupModule } from 'primeng/avatargroup';
import { BadgeModule } from 'primeng/badge';
import { BreadcrumbModule } from 'primeng/breadcrumb';
import { ButtonModule } from 'primeng/button';
import { CalendarModule } from 'primeng/calendar';
import { CardModule } from 'primeng/card';
import { CarouselModule } from 'primeng/carousel';
import { CascadeSelectModule } from 'primeng/cascadeselect';
import { ChartModule } from 'primeng/chart';
import { CheckboxModule } from 'primeng/checkbox';
import { ChipModule } from 'primeng/chip';
import { ChipsModule } from 'primeng/chips';
import { CodeHighlighterModule } from 'primeng/codehighlighter';
import { ConfirmDialogModule } from 'primeng/confirmdialog';
import { ConfirmPopupModule } from 'primeng/confirmpopup';
import { ColorPickerModule } from 'primeng/colorpicker';
import { ContextMenuModule } from 'primeng/contextmenu';
import { DataViewModule } from 'primeng/dataview';
import { DialogModule } from 'primeng/dialog';
import { DividerModule } from 'primeng/divider';
import { DropdownModule } from 'primeng/dropdown';
import { FieldsetModule } from 'primeng/fieldset';
import { FileUploadModule } from 'primeng/fileupload';
import { GalleriaModule } from 'primeng/galleria';
import { ImageModule } from 'primeng/image';
import { InplaceModule } from 'primeng/inplace';
import { InputNumberModule } from 'primeng/inputnumber';
import { InputMaskModule } from 'primeng/inputmask';
import { InputSwitchModule } from 'primeng/inputswitch';
import { InputTextModule } from 'primeng/inputtext';
import { InputTextareaModule } from 'primeng/inputtextarea';
import { KnobModule } from 'primeng/knob';
import { LightboxModule } from 'primeng/lightbox';
import { ListboxModule } from 'primeng/listbox';
import { MegaMenuModule } from 'primeng/megamenu';
import { MenuModule } from 'primeng/menu';
import { MenubarModule } from 'primeng/menubar';
import { MessagesModule } from 'primeng/messages';
import { MessageModule } from 'primeng/message';
import { MultiSelectModule } from 'primeng/multiselect';
import { OrderListModule } from 'primeng/orderlist';
import { OrganizationChartModule } from 'primeng/organizationchart';
import { OverlayPanelModule } from 'primeng/overlaypanel';
import { PaginatorModule } from 'primeng/paginator';
import { PanelModule } from 'primeng/panel';
import { PanelMenuModule } from 'primeng/panelmenu';
import { PasswordModule } from 'primeng/password';
import { PickListModule } from 'primeng/picklist';
import { ProgressBarModule } from 'primeng/progressbar';
import { RadioButtonModule } from 'primeng/radiobutton';
import { RatingModule } from 'primeng/rating';
import { RippleModule } from 'primeng/ripple';
import { ScrollPanelModule } from 'primeng/scrollpanel';
import { ScrollTopModule } from 'primeng/scrolltop';
import { SelectButtonModule } from 'primeng/selectbutton';
import { SidebarModule } from 'primeng/sidebar';
import { SkeletonModule } from 'primeng/skeleton';
import { SlideMenuModule } from 'primeng/slidemenu';
import { SliderModule } from 'primeng/slider';
import { SplitButtonModule } from 'primeng/splitbutton';
import { SplitterModule } from 'primeng/splitter';
import { StepsModule } from 'primeng/steps';
import { TabMenuModule } from 'primeng/tabmenu';
import { TableModule } from 'primeng/table';
import { TabViewModule } from 'primeng/tabview';
import { TagModule } from 'primeng/tag';
import { TerminalModule } from 'primeng/terminal';
import { TieredMenuModule } from 'primeng/tieredmenu';
import { TimelineModule } from 'primeng/timeline';
import { ToastModule } from 'primeng/toast';
import { ToggleButtonModule } from 'primeng/togglebutton';
import { ToolbarModule } from 'primeng/toolbar';
import { TooltipModule } from 'primeng/tooltip';
import { TreeModule } from 'primeng/tree';
import { TreeSelectModule } from 'primeng/treeselect';
import { TreeTableModule } from 'primeng/treetable';
import { VirtualScrollerModule } from 'primeng/virtualscroller';
import { BlockViewer } from './components/blockviewer/blockviewer.component';
import { StoreModule } from '@ngrx/store';
import { StoreDevtoolsModule } from '@ngrx/store-devtools';
import { StoreRouterConnectingModule } from '@ngrx/router-store';

import { AppCodeModule } from './components/app-code/app.code.component';
import { AppComponent } from './app.component';
import { AppMainComponent } from './app.main.component';
import { AppTopBarComponent } from './app.topbar.component';
import { AppFooterComponent } from './app.footer.component';
import { AppConfigComponent } from './app.config.component';
import { AppMenuComponent } from './app.menu.component';
import { AppMenuitemComponent } from './app.menuitem.component';

import { DashboardComponent } from './components/dashboard/dashboard.component';
import { FormLayoutComponent } from './components/formlayout/formlayout.component';
import { FloatLabelComponent } from './components/floatlabel/floatlabel.component';
import { InvalidStateComponent } from './components/invalidstate/invalidstate.component';
import { InputComponent } from './components/input/input.component';
import { ButtonComponent } from './components/button/button.component';
import { TableComponent } from './components/table/table.component';
import { ListComponent } from './components/list/list.component';
import { TreeComponent } from './components/tree/tree.component';
import { PanelsComponent } from './components/panels/panels.component';
import { OverlaysComponent } from './components/overlays/overlays.component';
import { MediaComponent } from './components/media/media.component';
import { MenusComponent } from './components/menus/menus.component';
import { MessagesComponent } from './components/messages/messages.component';
import { MiscComponent } from './components/misc/misc.component';
import { EmptyComponent } from './components/empty/empty.component';
import { ChartsComponent } from './components/charts/charts.component';
import { FileComponent } from './components/file/file.component';
import { DocumentationComponent } from './components/documentation/documentation.component';
import { CrudComponent } from './components/crud/crud.component';
import { TimelineComponent } from './components/timeline/timeline.component';
import { IconsComponent } from './components/icons/icons.component';
import { BlocksComponent } from './components/blocks/blocks.component';
import { PaymentComponent } from './components/menus/payment.component';
import { ConfirmationComponent } from './components/menus/confirmation.component';
import { PersonalComponent } from './components/menus/personal.component';
import { SeatComponent } from './components/menus/seat.component';
import { LandingComponent } from './components/landing/landing.component';

//import { RequestClass } from './api/2.0/request';
import { CountryService } from './service/countryservice';
import { CustomerService } from './service/customerservice';
import { EventService } from './service/eventservice';
import { IconService } from './service/iconservice';
import { NodeService } from './service/nodeservice';
import { PhotoService } from './service/photoservice';
import { ProductService } from './service/productservice';
import { MenuService } from './service/app.menu.service';
import { ConfigService } from './service/app.config.service';
import { LoginComponent } from './components/login/login.component';
import { ErrorComponent } from './components/error/error.component';
import { NotfoundComponent } from './components/notfound/notfound.component';
import { AccessComponent } from './components/access/access.component';
import { BasicInfoComponent } from './pages/basic-info/basic-info.component';
import { HydrantBasicinfoComponent } from './pages/hydrant-basicinfo/hydrant-basicinfo.component';
import { ConfirmationService } from 'primeng/api';
import { QuotaComponent } from './pages/quota/quota.component';
import { StatisticComponent } from './pages/statistic/statistic.component';
import { VisualizationComponent } from './pages/visualization/visualization.component';
import { GoBigScreenComponent } from './pages/go-big-screen/go-big-screen.component';
import { AlarmMgmtComponent } from './pages/alarm-mgmt/alarm-mgmt.component';
import { WellsInfoComponent } from './pages/wells-info/wells-info.component';
import { HydrantInfoComponent } from './pages/hydrant-info/hydrant-info.component';
import { StatistReportAreaComponent } from './pages/statist-report-area/statist-report-area.component';
import { StatistReportDistrictComponent } from './pages/statist-report-district/statist-report-district.component';
import { StatistReportTownComponent } from './pages/statist-report-town/statist-report-town.component';
import { StatistReportUserComponent } from './pages/statist-report-user/statist-report-user.component';
import { StatistReportVillageComponent } from './pages/statist-report-village/statist-report-village.component';
import { TaskManageComponent } from './pages/task-manage/task-manage.component';
import { LicenseManageComponent } from './pages/license-manage/license-manage.component';
import { DataDetailComponent } from './pages/data-detail/data-detail.component';
import { MixedReportComponent } from './pages/mixed-report/mixed-report.component';
import { reducers, metaReducers } from './store/metaReducer';
import { NgxEchartsModule } from 'ngx-echarts';
import { HomePageComponent } from './pages/home-page/home-page.component';


import { RequestClass } from './service/request.service';
import { AccountService } from './service/account.service';
import { StatisticsService } from './service/statistics.service';
import { HomeService } from './service/home.service';
import { WellService } from './service/well.service';
import { ApplicantService } from './service/applicant.service';
import { MeterService } from './service/meter.service';
import { DepartmentService } from './service/department.service';
import { AddrService } from './service/addr.service';
import { UtilsService } from './service/utils.service';
import { AddrSelectComponent } from './components/addr-select/addr-select.component';
import { transform } from './service/utils/transform';
import { PlanService } from './service/plan.service';
import { VolumeService } from './service/volume.service';
import { WarnService } from './service/warn.service';
import { WarningService } from './service/warning.service';
import { LicenseService } from './service/license.service';
import { DataDetailService } from './service/datadetai.service';
import { TaskService } from './service/task.service';
import { MixedService } from './service/mixed.service';
import { MapService } from './service/map.service';
import { HoverModalComponent } from './components/hover-modal/hover-modal.component';
import { DeviceService } from './service/device.service';
import { AddressAreaComponent } from './pages/address-area/address-area.component';
import { AddressCityComponent } from './pages/address-city/address-city.component';
import { AddressDistrictComponent } from './pages/address-district/address-district.component';
import { AddressTownComponent } from './pages/address-town/address-town.component';
import { AddressVillageComponent } from './pages/address-village/address-village.component';
import { AccountManageComponent } from './pages/account-manage/account-manage.component';
import { PostManageComponent } from './pages/post-manage/post-manage.component';
import { MenuManageComponent } from './pages/menu-manage/menu-manage.component';
import { ApiManageComponent } from './pages/api-manage/api-manage.component';
import { AcceptManageComponent } from './pages/accept-manage/accept-manage.component';
import { PermissionManageComponent } from './pages/permission-manage/permission-manage.component';
import { AccountPostManageComponent } from './pages/account-post-manage/account-post-manage.component';
import { PostService } from './service/post.service';
import { ApiMenuService } from './service/menu.service';

@NgModule({
    imports: [
        ConfirmDialogModule,
        BrowserModule,
        FormsModule,
        AppRoutingModule,
        HttpClientModule,
        BrowserAnimationsModule,
        AccordionModule,
        AutoCompleteModule,
        AvatarModule,
        AvatarGroupModule,
        BadgeModule,
        BreadcrumbModule,
        ButtonModule,
        CalendarModule,
        CardModule,
        CarouselModule,
        CascadeSelectModule,
        ChartModule,
        CheckboxModule,
        ChipsModule,
        ChipModule,
        CodeHighlighterModule,
        ConfirmDialogModule,
        ConfirmPopupModule,
        ColorPickerModule,
        ContextMenuModule,
        DataViewModule,
        DialogModule,
        DividerModule,
        DropdownModule,
        FieldsetModule,
        FileUploadModule,
        GalleriaModule,
        ImageModule,
        InplaceModule,
        InputNumberModule,
        InputMaskModule,
        InputSwitchModule,
        InputTextModule,
        InputTextareaModule,
        KnobModule,
        LightboxModule,
        ListboxModule,
        MegaMenuModule,
        MenuModule,
        MenubarModule,
        MessageModule,
        MessagesModule,
        MultiSelectModule,
        OrderListModule,
        OrganizationChartModule,
        OverlayPanelModule,
        PaginatorModule,
        PanelModule,
        PanelMenuModule,
        PasswordModule,
        PickListModule,
        ProgressBarModule,
        RadioButtonModule,
        RatingModule,
        RippleModule,
        ScrollPanelModule,
        ScrollTopModule,
        SelectButtonModule,
        SidebarModule,
        SkeletonModule,
        SlideMenuModule,
        SliderModule,
        SplitButtonModule,
        SplitterModule,
        StepsModule,
        TagModule,
        TableModule,
        TabMenuModule,
        TabViewModule,
        TerminalModule,
        TieredMenuModule,
        TimelineModule,
        ToastModule,
        ToggleButtonModule,
        ToolbarModule,
        TooltipModule,
        TreeModule,
        TreeSelectModule,
        TreeTableModule,
        VirtualScrollerModule,
        AppCodeModule,
        StyleClassModule,
        StoreModule.forRoot(reducers, { metaReducers }),
        StoreRouterConnectingModule.forRoot(),
        NgxEchartsModule,
    ],
    declarations: [
        AppComponent,
        AppMainComponent,
        AppTopBarComponent,
        AppFooterComponent,
        AppConfigComponent,
        AppMenuComponent,
        AppMenuitemComponent,
        DashboardComponent,
        FormLayoutComponent,
        FloatLabelComponent,
        InvalidStateComponent,
        InputComponent,
        ButtonComponent,
        TableComponent,
        ListComponent,
        TreeComponent,
        PanelsComponent,
        OverlaysComponent,
        MenusComponent,
        MessagesComponent,
        MessagesComponent,
        MiscComponent,
        ChartsComponent,
        EmptyComponent,
        FileComponent,
        IconsComponent,
        DocumentationComponent,
        CrudComponent,
        TimelineComponent,
        BlocksComponent,
        BlockViewer,
        MediaComponent,
        PaymentComponent,
        ConfirmationComponent,
        PersonalComponent,
        SeatComponent,
        LandingComponent,
        LoginComponent,
        ErrorComponent,
        NotfoundComponent,
        AccessComponent,
        BasicInfoComponent,
        HydrantBasicinfoComponent,
        QuotaComponent,
        StatisticComponent,
        VisualizationComponent,
        GoBigScreenComponent,
        AlarmMgmtComponent,
        WellsInfoComponent,
        HydrantInfoComponent,
        StatistReportAreaComponent,
        StatistReportDistrictComponent,
        StatistReportTownComponent,
        StatistReportUserComponent,
        StatistReportVillageComponent,
        TaskManageComponent,
        LicenseManageComponent,
        DataDetailComponent,
        MixedReportComponent,
        HomePageComponent,
        AddrSelectComponent,
        HoverModalComponent,
        AddressAreaComponent,
        AddressCityComponent,
        AddressDistrictComponent,
        AddressTownComponent,
        AddressVillageComponent,
        AccountManageComponent,
        PostManageComponent,
        MenuManageComponent,
        ApiManageComponent,
        AcceptManageComponent,
        PermissionManageComponent,
        AccountPostManageComponent,
    ],
    providers: [
        { provide: LocationStrategy, useClass: HashLocationStrategy },
        CountryService,
        CustomerService,
        EventService,
        IconService,
        NodeService,
        PhotoService,
        ProductService,
        MenuService,
        ConfigService,
        ConfirmationService,
        RequestClass,
        AccountService,
        StatisticsService,
        HomeService,
        WellService,
        ApplicantService,
        MeterService,
        DepartmentService,
        AddrService,
        UtilsService,
        transform,
        PlanService,
        VolumeService,
        WarnService,
        WarningService,
        LicenseService,
        DataDetailService,
        TaskService,
        MixedService,
        MapService,
        DeviceService,
        PostService,
        ApiMenuService
    ],
    bootstrap: [AppComponent],
})
export class AppModule {}
